package com.atguigu.tingshu.search.config;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

@Component
public class ThreadPoolExecutorConfig {



    /**
     * 配置并返回一个线程池执行器
     *
     * @return 初始化并配置好的线程池执行器实例
     */
    @Bean
    public ThreadPoolExecutor threadPoolExecutor(){
        // 获取系统可用处理器的核心数，用于线程池的初始线程数配置
        int processors = Runtime.getRuntime().availableProcessors();

        // 创建并返回一个线程池执行器实例
        // 参数说明：
        // corePoolSize: 线程池的基本线程数，这里设置为系统可用处理器的核心数
        // maximumPoolSize: 线程池最大线程数，这里设置为20
        // keepAliveTime: 空闲线程存活时间，超过这个时间会被终止
        // unit: keepAliveTime的时间单位，这里为秒
        // workQueue: 任务队列，用于保存等待执行的任务
        return new ThreadPoolExecutor(
                processors,                             // 核心线程数        IO 密集型:2n;CPU密集型: n+1        n: cpu核数
                20,
                30,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(100));
    }
}
